﻿//Created by Action Script Viewer - http://www.buraks.com/asv
package de.polygonal.ds.sort {
    import de.polygonal.ds.*;

    public function dLinkedInsertionSortCmp(_arg1:DListNode, _arg2:Function, _arg3:Boolean=false):DListNode{
        var _local5:DListNode;
        var _local6:DListNode;
        var _local7:DListNode;
        var _local8:DListNode;
        var _local9:*;
        if (((!(_arg1)) || ((_arg2 == null)))){
            return (null);
        };
        var _local4:DListNode = _arg1;
        if (_arg3){
            _local6 = _local4.next;
            while (_local6) {
                _local7 = _local6.next;
                _local5 = _local6.prev;
                if (_arg2(_local5.data, _local6.data) < 0){
                    _local8 = _local5;
                    while (_local8.prev) {
                        if (_arg2(_local8.prev.data, _local6.data) < 0){
                            _local8 = _local8.prev;
                        } else {
                            break;
                        };
                    };
                    if (_local7){
                        _local5.next = _local7;
                        _local7.prev = _local5;
                    } else {
                        _local5.next = null;
                    };
                    if (_local8 == _local4){
                        _local6.prev = null;
                        _local6.next = _local8;
                        _local8.prev = _local6;
                        _local4 = _local6;
                    } else {
                        _local6.prev = _local8.prev;
                        _local8.prev.next = _local6;
                        _local6.next = _local8;
                        _local8.prev = _local6;
                    };
                };
                _local6 = _local7;
            };
        } else {
            _local6 = _local4.next;
            while (_local6) {
                _local7 = _local6.next;
                _local5 = _local6.prev;
                if (_arg2(_local5.data, _local6.data) > 0){
                    _local8 = _local5;
                    while (_local8.prev) {
                        if (_arg2(_local8.prev.data, _local6.data) > 0){
                            _local8 = _local8.prev;
                        } else {
                            break;
                        };
                    };
                    if (_local7){
                        _local5.next = _local7;
                        _local7.prev = _local5;
                    } else {
                        _local5.next = null;
                    };
                    if (_local8 == _local4){
                        _local6.prev = null;
                        _local6.next = _local8;
                        _local8.prev = _local6;
                        _local4 = _local6;
                    } else {
                        _local6.prev = _local8.prev;
                        _local8.prev.next = _local6;
                        _local6.next = _local8;
                        _local8.prev = _local6;
                    };
                };
                _local6 = _local7;
            };
        };
        return (_local4);
    }
}//package de.polygonal.ds.sort 
